package org.patterns.behavior.state;


/**
 * 正常状态：具体状态类
 * 处理账户在正常状态下的存款、取款、利息计算和状态转换逻辑
 */
public class NormalState extends AccountState {

    /**
     * 构造函数：直接绑定账户对象
     *
     * @param account 需要绑定状态的目标账户对象
     */
    public NormalState(Account account) {
        this.account = account;
    }

    /**
     * 构造函数：从其他状态继承账户对象
     *
     * @param state 需要继承账户对象的状态实例
     */
    public NormalState(AccountState state) {
        this.account = state.account;
    }

    /**
     * 存款操作
     *
     * @param amount 存款金额（正数）
     */
    public void deposit(double amount) {
        // 更新余额并触发状态检查
        account.setBalance(account.getBalance() + amount);
        stateCheck();
    }

    /**
     * 取款操作
     *
     * @param amount 取款金额（正数）
     */
    public void withdraw(double amount) {
        // 更新余额并触发状态检查
        account.setBalance(account.getBalance() - amount);
        stateCheck();
    }

    /**
     * 计算利息（正常状态无需计算）
     */
    public void computeInterest() {
        System.out.println("正常状态，无须支付利息！");
    }

    /**
     * 状态转换检查方法
     * 据余额判断状态迁移规则：
     * 1. -2000<余额<=0 转换为透支状态
     * 2. 余额<=-2000 转换为限制状态
     * 3. 余额>0 保持正常状态
     */
    public void stateCheck() {
        // 多条件状态转换判断
        if (account.getBalance() > -2000 && account.getBalance() <= 0) {
            account.setState(new OverdraftState(this));
        } else if (account.getBalance() <= -2000) {
            account.setState(new RestrictedState(this));
        }
    }
}
